Published in:2024-10-24 |

模块

一、模块概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1. 在一个大型项目的开发过程上,如果将所有的代码都写在一个.py文件中,那么将会导致文件中的代码过长,代码的阅读和维护变得很困难.

2. 因此,我们可以根据功能需求的不同,将项目中的不同功能实现的代码放置在不同的.py文件中.
- 人员信息管理系统:
- Date类放在date.py
- Person类放在person.py
- PersonList类放在personlist.py

3. 在Python中,一个.py文件就称之为一个模块(module),即一个py文件被看作是一个独立的模块.

4. 一个项目,可以由很多个.py文件来组成,当然我们也可以将多个关系比较紧密的.py文件中组织在一起,放在一个目录中(Python中的包).
项目名:
目录1-包1
1.py
2.py
目录2-包2
hello.py
world.py
  • 项目结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在Python中,如何管理项目结构

1. 一个项目可以分为很多个目录(包),一个包就是一个完整的功能模块的集合

2. 每个包里又可以有很多个.py文件

3. 每个py文件中,可以有很多个变量、函数、类..

4. 每个类中,又可以有很多个属性和方法

目的:最终实现'模块化开发',一个项目分为很多个功能模块
- 结构清晰
- 方便维护
- 复用性高

二、模块的分类

1
2
3
4
5
6
7
8
9
10
11
12
1. 内置模块(Python自带,已经写好的.py文件,安装python解释器时已经有了)
- os模块、time模块、sys模块、math模块....
- 在这些模块中,定义好了很多个变量、函数、类等,可以供程序员直接使用

2. 自定义模块(自己写的.py文件)
- demo01.py demo02.py
- 定义模块名时,不要和内置模块重名
- 模块名一般小写

3. 第三方开源模块(大牛/别人写好的.py文件)
- pypi.org 供开源作者上传他的py文件,其他人下载py文件 (闲鱼)
- download下载压缩 或 pip install 模块名

三、模块的使用

  • 内置模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import math  # 导入模块
print(math.pi)
print(math.pow(2,3))
print(math.hypot(3,4))


import math as mt
print(mt.pi)


from math import pi
print(pi)


from math import pi as pai
print(pai)


from math import * # 导入所有
print(pi)
  • 自定义模块
1
2
3
4
# student.py
a = 100
def f():
print('this is student function')
1
2
3
4
5
6
7
8
9
# studentlist.py
import student
print(student.a)

import student as st
print(st.a)
st.f()

# 与内置模块的导入是一样的

总结:

  • 内置、自定义模块导入方式
1
2
3
4
5
6
7
8
9
1. import 模块名1,模块名2

2. import 模块名 as 别名

3. from 模块名 import 标识符(全局变量、函数、类)

4. from 模块名 import 标识符 as 别名

5. from 模块名 import *

注意:导入模块时,会自动执行里面的代码

四、包

1、包的概念
1
2
3
4
5
6
7
1. 包 Package: 是一种特殊的目录,可以包含多个模块(py文件)或子包

2. Python规定包下面必须包含一个__init__文件
- init文件一般为空文件
- 如果__init__中定义了代码,在导包时会被自动执行

3. 包名一般为小写
2、包的使用
1
2
3
4
5
6
7
8
9
10
11
12
# 创建包的两种方式
1. 创建一个空目录,然后在目录创建一个__ini__.py文件即可
2. pycharm右键-New -> Python Package

- pack1
- __init__.py
- p1.py

- pack2
- __init__.py
- p2.py
- main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# main.py
import pack1.p1
print(pack1.p1.a)


import pack1.p1 as pk1
print(pk1.a)


from pack1 import p1
print(p1.a)


from pack1 import p1 as pk1
print(pk1.a)


from pack1.p1 import a
print(a)


from pack1.p1 import *
print(a)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
导包建议使用from语法 
from 包名 import 模块名
模块名.xx

# 总结导包的方式:
1. import 包名.模块
- 包名.模块名.xx
2. import 包名.模块 as 别名
- 别名.xx
3. from 包名 import 模块名
- 模块名.xx
4. from 包名 import 模块名 as 别名
- 别名.xx
5. from 包名.模块名 import 标识符
- xx
6. from 包名.模块名 import *
- xx

五、__name__

1
2
3
4
5
6
7
1. __name__是一个变量,可以在任意地方使用

2. 如果以当前文件运行,__name__的值为 __main__

3. 如果这个文件(模块)是被其它文件(模块)引用,并是以其它模块来运行时,__name__的值为这个模块的路径

4. 通过__name__可以得知是否是以当前模块来运行的

使用场景:

如果某个模块中的代码,只有以当前文件运行时才执行,此时可以添加如下代码:

1
2
3
if __name__ == '__main__':
当前模块的测试代码
当该模块是被其它模块导入,并以其它模块运行时,这里的代码不会被执行

六、模块的搜索路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 获取系统搜索模块的路径
import sys
print(sys.path)

# 系统会在sys.path所列出的路径中去查找当前导入的模块,如果在这些路径找不到该模块,则提示 No module named 'pack11'


对于自定义模块导入时的寻找路径有:
1. 项目目录
2. 当前模块所在的目录

对于内置模块一般在:
1. python安装目录的lib目录下

对于第三方模块:
1. \lib\site-packages

七、time模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# time是Python内置的一个关于时间的模块

import time

# 格林威治时间1970年1月1日0时0分0秒到现在时间所经过的总秒数
# 它的值是一个float类型,也就是时间戳是一个时间差
t = time.time()
print(t) # 返回的是一个时间戳

localtime = time.localtime() # 默认返回当前时间元组
print(localtime)
print(localtime.tm_year)
print(localtime.tm_mon)


# 产品经理 -

localtime = time.localtime(t)
print(localtime)

asctime = time.asctime() # Thu Jul 23 16:18:45 2020
print(asctime)

print(time.mktime(localtime)) # 接收一个时间元组 返回到给定的时间的时间戳

print(time.strftime('%Y/%m/%d %H:%M:%S',time.localtime()))

time.sleep(3) # 程序休眠3s

1
2
3
4
5
6
7
from datetime import datetime

print(datetime.now())

print(str(datetime.now()).split('.')[0])

print(datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
Prev:
Next: